package com.ruoyi.ws.utils;

import java.io.Serializable;

import com.fasterxml.jackson.annotation.JsonIgnore;

/**
 * @author zhangxianqing
 * @create 2020-06-25 20:47
 */
public class Wrapper<T> implements Serializable {

  /** 序列化标识 */
  private static final long serialVersionUID = 4893280118017319089L;

  /** 错误码：参数非法 */
  public static final int ILLEGAL_ARGUMENT_CODE = 100;

  /** 错误信息：参数非法 */
  public static final String ILLEGAL_ARGUMENT_MESSAGE = "参数非法";

  /** 错误码：时间过期 */
  public static final int TIME_OUT_CODE = 110;

  /** 错误信息：时间过期 */
  public static final String TIME_OUT_MESSAGE = "安全认证失败，时间过期";

  /** 错误码：安全认证失败 */
  public static final int SECURE_FAIL_CODE = 120;

  /** 错误信息：安全认证失败 */
  public static final String SECURE_FAIL_MESSAGE = "安全认证失败，签名错误";

  /** 成功码. */
  public static final int SUCCESS_CODE = 200;

  /** 成功信息. */
  public static final String SUCCESS_MESSAGE = "OK";

  /** 错误码. */
  public static final int ERROR_CODE = 500;

  /** 错误信息. */
  public static final String ERROR_MESSAGE = "抱歉，当前值班小哥翘班了，我们马上报告老板！";

  /** 编号. */
  private int code;

  /** 信息. */
  private String message;

  /** 结果数据 */
  private T result;

  /**
   * Instantiates a new wrapper. default code=200
   */
  public Wrapper() {
    this(SUCCESS_CODE, SUCCESS_MESSAGE);
  }

  /**
   * Instantiates a new wrapper.
   *
   * @param code
   *            the code
   * @param message
   *            the message
   */
  public Wrapper(int code, String message) {
    this(code, message, null);
  }

  /**
   * Instantiates a new wrapper.
   *
   * @param code
   *            the code
   * @param message
   *            the message
   * @param result
   *            the result
   */
  public Wrapper(int code, String message, T result) {
    super();
    this.code(code).message(message).result(result);
  }

  /**
   * Gets the 编号.
   *
   * @return the 编号
   */
  public int getCode() {
    return code;
  }

  /**
   * Sets the 编号.
   *
   * @param code
   *            the new 编号
   */
  public void setCode(int code) {
    this.code = code;
  }

  /**
   * Gets the 信息.
   *
   * @return the 信息
   */
  public String getMessage() {
    return message;
  }

  /**
   * Sets the 信息.
   *
   * @param message
   *            the new 信息
   */
  public void setMessage(String message) {
    this.message = message;
  }

  /**
   * Gets the 结果数据.
   *
   * @return the 结果数据
   */
  public T getResult() {
    return result;
  }

  /**
   * Sets the 结果数据.
   *
   * @param result
   *            the new 结果数据
   */
  public void setResult(T result) {
    this.result = result;
  }

  /**
   * Sets the 编号 ，返回自身的引用.
   *
   * @param code
   *            the new 编号
   *
   * @return the wrapper
   */
  public Wrapper<T> code(int code) {
    this.setCode(code);
    return this;
  }

  /**
   * Sets the 信息 ，返回自身的引用.
   *
   * @param message
   *            the new 信息
   *
   * @return the wrapper
   */
  public Wrapper<T> message(String message) {
    this.setMessage(message);
    return this;
  }

  /**
   * Sets the 结果数据 ，返回自身的引用.
   *
   * @param result
   *            the new 结果数据
   *
   * @return the wrapper
   */
  public Wrapper<T> result(T result) {
    this.setResult(result);
    return this;
  }

  /**
   * 判断是否成功： 依据 Wrapper.SUCCESS_CODE == this.code
   *
   * @return code=200,true;否则 false.
   */

  @JsonIgnore(true)
  public boolean isSuccess() {
    return Wrapper.SUCCESS_CODE == this.code;
  }

}